#include <stdio.h>

void minNotRep(int n)
{
	//需要多次判断	
	while(1)
	{
		int a[20], len=0,i,b=0;
		//flag为true表示是“重复数”，为false表示是“不重复数”
		bool flag=false;
		//将n逆序存到数组中，个位存储在a[0]
		while(n)
		{
			a[len++]=n%10;
			n=n/10;
		}
		//从高位开始遍历是否有重复位
		for(i=len-1; i>0; i--)
		{
			//有重复位则次高位加1（最高位有可能进位但这里不需要额外处理）
			if(a[i]==a[i-1] && !flag)
			{
				a[i-1]++;
				flag = true;
			}
			else if(flag)
			{
				//将重复位后面的位置为0101...形式
				a[i-1] = b;
				b=(b==0)?1:0;
			}
		}
		//重组各位数字为n，如果是“不重复数”则输出退出，否则继续判断
		for(i=len-1;i>=0;i--)
		{
			n=n*10+a[i];
		}
		if(!flag)
		{
			printf("%d\n", n);
			break;
		}
	}
	

}

int main()
{
	int N;
	while(scanf("%d",&N)!=EOF)
	{
		minNotRep(N+1);
	}

	return 0;
	
}

